home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Franz PD
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip
/
Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf
/
ASo-Tools
/
Sources
/
FlushLibs.asm
< prev
next >
Wrap
Assembly Source File
|
1994-04-02
|
4KB
|
153 lines
;* $Revision Header built automatically *************** (do not edit) ************
;*
;* © Copyright by (none)
;*
;* File : FlushLibs.asm
;* Created on : Saturday, 02.04.94 21:40:31
;* Created by : Arnold Schommer
;* Current revision : V1.0
;*
;*
;* Purpose
;* -------
;* - versucht, alle unbenutzten Libraries zu schließen, indem es
;* sie öffnet, das DELEXP-Flag setzt und sie dann schließt.
;*
;* Revision V1.0
;* --------------
;* created on Saturday, 02.04.94 21:40:31 by Arnold Schommer. LogMessage :
;* --- Initial release ---
;*
;*********************************************************************************
REVISION MACRO
dc.b "1.0"
ENDM
REVDATE MACRO
dc.b "02.04.94"
ENDM
REVTIME MACRO
dc.b "21:40:31"
ENDM
AUTHOR MACRO
dc.b "Arnold Schommer"
ENDM
VERNUM EQU 1
REVNUM EQU 0
****************************************************************************
NOLIST
INCLUDE "exec/LVO.i"
INCLUDE "dos/dosextens.i"
INCLUDE "exec/lists.i"
INCLUDE "exec/libraries.i"
INCLUDE "exec/memory.i"
INCLUDE "exec/execbase.i"
LIST
MAXSTR: equ 100
STRUCTURE LibName,0
; (meine Erfindung, zur kompakten Speicherung der Library-Namen)
APTR ln_next
STRUCT ln_Name,MAXSTR
LABEL ln_SIZEOF
****************************************************************************
;Register-Variablen:
WBMsg: EQUR d5
LibsAnchor: equr a5
****************************************************************************
SECTION prg,CODE
;Library-Namen kopieren:
_main: moveq #0,WBMsg
moveq #RETURN_FAIL,d3
move.l WBMsg,a1 ;a1=0->eigener Task
CALLEXEC FindTask ;Wo darf man denn nachschauen ?
move.l d0,a4
tst.l pr_CLI(a4) ;von CLI oder WB aus gestartet ?
bne fromCLI
;von WB aus:
lea pr_MsgPort(a4),a0
CALL WaitPort ;auf Start-Message warten
lea pr_MsgPort(a4),a0
CALL GetMsg ;muß nachher beantwortet werden
move.l d0,WBMsg
****************************************************************************
;das eigentliche Programm:
fromCLI:
;Library-Namen kopieren:
CALLEXEC Forbid ;keine Änderungen während des Lesens !
sub.l LibsAnchor,LibsAnchor
move.l LibsAnchor,a2
move.l LibList+LH_HEAD(a6),a3
LibsLoop:
tst.l LN_SUCC(a3)
beq EndLibList
tst.w LIB_OPENCNT(a3)
bne NextLib
move.l #ln_SIZEOF,d0
move.l #MEMF_CLEAR,d1
CALL AllocMem
tst.l d0
beq EndLibList ;Ende der Liste, weil kein Speicher
move.l a2,d1 ;tst.l a2
beq 3$
move.l d0,ln_next(a2)
bra 4$
3$: move.l d0,LibsAnchor
4$: move.l d0,a2
lea ln_Name(a2),a0
move.l LN_NAME(a3),a1
;Stringkopie bis (max.) MAXSTR Zeichen:
moveq #MAXSTR-1,d0
1$: move.b (a1)+,(a0)+
dbeq d0,1$
move.b #0,-(a0)
NextLib: move.l LN_SUCC(a3),a3
bra LibsLoop
EndLibList:
CALL Permit
; los geht's:
FlushLoop:
move.l LibsAnchor,d0 ;tst.l LibsAnchor
beq ende
lea ln_Name(LibsAnchor),a1
CALL OldOpenLibrary
tst.l d0
beq 2$
move.l d0,a1
bset #LIBB_DELEXP,LIB_FLAGS(a1)
CALL CloseLibrary
; Library-Knoten freigeben:
2$: move.l LibsAnchor,a1
move.l ln_next(LibsAnchor),LibsAnchor
move.l #ln_SIZEOF,d0
CALL FreeMem
bra FlushLoop
****************************************************************************
ende: tst.l WBMsg ;war da was ?
beq toCLI ;na dann halt nicht
;Message zur WB zurück
CALL Forbid
move.l WBMsg,a1
CALL ReplyMsg
toCLI: moveq #RETURN_OK,d0 ;keine Fehler
rts
****************************************************************************
;Versions-String
dc.b "$VER: FlushLibs "
REVISION
dc.b " ("
REVDATE
dc.b ")",0
END